<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
    <title>Title</title>
    <style>

    </style>
</head>
<body>
<script>
    /*
    * 函数作用域
    *   - 调用函数时创建函数作用域，函数执行完毕以后，函数作用域销毁
    *   - 每调用一次函数就会创建一个新的函数作用域，他们之间是互相独立的
    *   - 在函数作用域中可以访问到全局作用域的变量，
    *       在全局作用域中无法访问到函数作用域的变量
    *   - 当在函数作用域中操作一个变量时，它会在自身作用域中寻找，如果有就直接使用，
    *       如果没有就向上一级作用域中寻找，直到找到全局作用域
    *       如果全局作用域中依然没有找到，则会报错ReferenceError
    *   -在函数中要访问全局变量可以使用window对象
    *
    *
    *
    *
    *
    * */
    var a = 20
    function fun(){
        console.log(a);
        var b = 10;

    }

    // console.log(b);//访问函数作用域的变量b,报错，不能得到
    /*
    *
    * 在函数作用域中也有声明提前的特性
    *   使用var关键字声明的变量，会在函数中所有的代码执行之前被声明
    *   函数声明也会在在函数中所有的代码执行之前执行
    *
    *
    *
    * */
    function fun3(){
        console.log(a);//undefined
        var a = 10
    }
    fun3()
    function fun2(){
        console.log(a);//undefined
        var a = 10
        fun4()
        function fun4(){
            console.log(d)
            var d = 80;
        }
    }
    fun2()




    var t = 34;
    function fun5(){
        console.log('t = ' + t)//34
        //在函数中，不使用var声明的变量都会成为全局变量
        t = 10
    }
    fun5()
    console.log('t = ' + t)//10


    /*
    * 定义形参就相当于在函数作用域中声明了变量
    * */

    function fun7(e){
        console.log(e);
    }
    fun7()//undefined

</script>
</body>
</html>